package ni.org.ics.estudios.cohorte.muestreoanual.activities;


import java.util.ArrayList;

import ni.org.ics.estudios.cohorte.muestreoanual.MainActivity;
import ni.org.ics.estudios.cohorte.muestreoanual.R;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.CambioEstudioAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.ConsentimientoChikAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.EncuestaCasaAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.EncuestaParticipanteAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.LactanciaMaternaAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.MuestraAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.ObsequioAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.PesoyTallaAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.ReconsentimientoAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.VacunaAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.adapters.VisitaTerrenoAdapter;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.CambioEstudio;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.ConsentimientoChik;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.EncuestaCasa;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.EncuestaParticipante;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.LactanciaMaterna;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.Muestra;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.Obsequio;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.PesoyTalla;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.ReConsentimientoDen;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.Vacuna;
import ni.org.ics.estudios.cohorte.muestreoanual.domain.VisitaTerreno;
import ni.org.ics.estudios.cohorte.muestreoanual.utils.Constants;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.ListActivity;
import android.content.ActivityNotFoundException;
import android.content.Intent;

public class ListReviewActivity extends ListActivity {
	private String titulo;	
	private ImageButton mBarcodeButton;
	private EditText mSearchText;
	private TextWatcher mFilterTextWatcher;
	private Button mSearchButton;
	ArrayAdapter<EncuestaParticipante> mEncuestaParticipanteAdapter=null;
	ArrayAdapter<EncuestaCasa> mEncuestaCasaAdapter=null;
	ArrayAdapter<LactanciaMaterna> mLactanciaMaternaAdapter=null;
	ArrayAdapter<PesoyTalla> mPesoyTallaAdapter=null;
	ArrayAdapter<Muestra> mMuestraAdapter=null;
	ArrayAdapter<Obsequio> mObsequioAdapter=null;
	ArrayAdapter<Vacuna> mVacunaAdapter=null;
	ArrayAdapter<VisitaTerreno> mVisitaTerrenoAdapter=null;
	ArrayAdapter<ReConsentimientoDen> mReconsentimientoAdapter=null;
	ArrayAdapter<ConsentimientoChik> mConsentimientoChikAdapter=null;
	ArrayAdapter<CambioEstudio> mCambioEstudioAdapter=null;

	public static final int BARCODE_CAPTURE = 2;


	@SuppressWarnings("unchecked")
	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.find_item);

		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
			ActionBar actionBar = getActionBar();
			actionBar.setDisplayHomeAsUpEnabled(true);
		}

		titulo = getIntent().getExtras().getString(Constants.TITLE);

		//TextView titleView = (TextView) findViewById(R.id.title);
		//titleView.setText(titulo);
		//titleView.setTextColor(getResources().getColor(R.color.text_light));

		//Configuracion para la busqueda
		mFilterTextWatcher = new TextWatcher() {
			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				if (mEncuestaParticipanteAdapter != null) {
					mEncuestaParticipanteAdapter.getFilter().filter(s);
				}
				if (mEncuestaCasaAdapter != null) {
					mEncuestaCasaAdapter.getFilter().filter(s);
				}
				if (mLactanciaMaternaAdapter != null) {
					mLactanciaMaternaAdapter.getFilter().filter(s);
				}
				if (mPesoyTallaAdapter != null) {
					mPesoyTallaAdapter.getFilter().filter(s);
				}
				if (mMuestraAdapter != null) {
					mMuestraAdapter.getFilter().filter(s);
				}
				if (mObsequioAdapter != null) {
					mObsequioAdapter.getFilter().filter(s);
				}
				if (mVacunaAdapter != null) {
					mVacunaAdapter.getFilter().filter(s);
				}
				if (mVisitaTerrenoAdapter != null) {
					mVisitaTerrenoAdapter.getFilter().filter(s);
				}
				if (mReconsentimientoAdapter != null) {
					mReconsentimientoAdapter.getFilter().filter(s);
				}
				if (mConsentimientoChikAdapter != null) {
					mConsentimientoChikAdapter.getFilter().filter(s);
				}
				if (mCambioEstudioAdapter != null) {
					mCambioEstudioAdapter.getFilter().filter(s);
				}
			}

			@Override
			public void afterTextChanged(Editable s) {

			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {

			}
		};

		mSearchText = (EditText) findViewById(R.id.search_text);
		mSearchText.addTextChangedListener(mFilterTextWatcher);
		mSearchText.setHint(titulo);
		mSearchButton = (Button) findViewById(R.id.search_button);
		mSearchButton.setVisibility(View.GONE);

		mBarcodeButton = (ImageButton) findViewById(R.id.barcode_button);
		mBarcodeButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent i = new Intent("com.google.zxing.client.android.SCAN");
				try {
					startActivityForResult(i, BARCODE_CAPTURE);
				} catch (ActivityNotFoundException e) {
					Toast t = Toast.makeText(getApplicationContext(),
							getString(R.string.error, R.string.barcode_error),
							Toast.LENGTH_LONG);
					t.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
					t.show();
				}
			}
		});

		if (titulo.matches(getString(R.string.info_survey1))){
			
			mEncuestaParticipanteAdapter = new EncuestaParticipanteAdapter(this, R.layout.list_item_review,
					(ArrayList<EncuestaParticipante>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mEncuestaParticipanteAdapter);
		} 

		if (titulo.matches(getString(R.string.info_survey2))){
		
			mEncuestaCasaAdapter = new EncuestaCasaAdapter(this, R.layout.list_item_review,
					(ArrayList<EncuestaCasa>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mEncuestaCasaAdapter);
		} 

		if (titulo.matches(getString(R.string.info_survey3))){
			
			mLactanciaMaternaAdapter = new LactanciaMaternaAdapter(this, R.layout.list_item_review,
					(ArrayList<LactanciaMaterna>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mLactanciaMaternaAdapter);
		} 

		if (titulo.matches(getString(R.string.info_weight))){
			
			mPesoyTallaAdapter = new PesoyTallaAdapter(this, R.layout.list_item_review,
					(ArrayList<PesoyTalla>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mPesoyTallaAdapter);
		} 

		if (titulo.matches(getString(R.string.info_sample))){
			
			mMuestraAdapter = new MuestraAdapter(this, R.layout.list_item_review,
					(ArrayList<Muestra>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mMuestraAdapter);
		}

		if (titulo.matches(getString(R.string.info_gift))){
			
			mObsequioAdapter = new ObsequioAdapter(this, R.layout.list_item_review,
					(ArrayList<Obsequio>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mObsequioAdapter);
		}

		if (titulo.matches(getString(R.string.info_vacc))){
			
			mVacunaAdapter = new VacunaAdapter(this, R.layout.list_item_review,
					(ArrayList<Vacuna>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mVacunaAdapter);
		}

		if (titulo.matches(getString(R.string.info_visit))){
			
			mVisitaTerrenoAdapter = new VisitaTerrenoAdapter(this, R.layout.list_item_review,
					(ArrayList<VisitaTerreno>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mVisitaTerrenoAdapter);
		}

		if (titulo.matches(getString(R.string.info_recon))){
			
			mReconsentimientoAdapter = new ReconsentimientoAdapter(this, R.layout.list_item_review,
					(ArrayList<ReConsentimientoDen>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mReconsentimientoAdapter);
		}
		
		if (titulo.matches(getString(R.string.info_conschik))){
			
			mConsentimientoChikAdapter = new ConsentimientoChikAdapter(this, R.layout.list_item_review,
					(ArrayList<ConsentimientoChik>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mConsentimientoChikAdapter);
		}
		
		if (titulo.matches(getString(R.string.info_chgest))){
			
			mCambioEstudioAdapter = new CambioEstudioAdapter(this, R.layout.list_item_review,
					(ArrayList<CambioEstudio>) getIntent().getExtras().getSerializable(Constants.OBJECTO));
			setListAdapter(mCambioEstudioAdapter);
		}

		ListView listView = (ListView) findViewById(android.R.id.list);
		listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		getMenuInflater().inflate(R.menu.general, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
			finish();
			return true;
		case R.id.MENU_BACK:
			finish();
			return true;
		case R.id.MENU_HOME:
			Intent i = new Intent(getApplicationContext(),
					MainActivity.class);
			i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(i);
			finish();
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	@Override
	protected void onListItemClick(ListView listView, View view, int position,
			long id) {
		Bundle arguments = new Bundle();
		Intent i = null;
		if (titulo.matches(getString(R.string.info_survey2))){
			EncuestaCasa encuestacasa = (EncuestaCasa) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_survey2));
			if (encuestacasa!=null) arguments.putSerializable(Constants.OBJECTO , encuestacasa);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_survey1))){
			EncuestaParticipante encuestapart = (EncuestaParticipante) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_survey1));
			if (encuestapart!=null) arguments.putSerializable(Constants.OBJECTO , encuestapart);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_survey3))){
			LactanciaMaterna lactanciamat = (LactanciaMaterna) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_survey3));
			if (lactanciamat!=null) arguments.putSerializable(Constants.OBJECTO , lactanciamat);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_weight))){
			PesoyTalla pyt = (PesoyTalla) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_weight));
			if (pyt!=null) arguments.putSerializable(Constants.OBJECTO , pyt);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_sample))){
			Muestra muestra = (Muestra) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_sample));
			if (muestra!=null) arguments.putSerializable(Constants.OBJECTO , muestra);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_gift))){
			Obsequio obsequio = (Obsequio) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_gift));
			if (obsequio!=null) arguments.putSerializable(Constants.OBJECTO , obsequio);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_vacc))){
			Vacuna vacuna = (Vacuna) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_gift));
			if (vacuna!=null) arguments.putSerializable(Constants.OBJECTO , vacuna);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_visit))){
			VisitaTerreno visita = (VisitaTerreno) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_visit));
			if (visita!=null) arguments.putSerializable(Constants.OBJECTO , visita);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_recon))){
			ReConsentimientoDen recons = (ReConsentimientoDen) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_recon));
			if (recons!=null) arguments.putSerializable(Constants.OBJECTO , recons);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_conschik))){
			ConsentimientoChik conschik = (ConsentimientoChik) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_conschik));
			if (conschik!=null) arguments.putSerializable(Constants.OBJECTO , conschik);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		if (titulo.matches(getString(R.string.info_chgest))){
			CambioEstudio cambioEst = (CambioEstudio) getListAdapter().getItem(position);
			arguments.putString(Constants.TITLE, getString(R.string.info_chgest));
			if (cambioEst!=null) arguments.putSerializable(Constants.OBJECTO , cambioEst);
			i = new Intent(getApplicationContext(),
					ReviewActivity.class);
		}
		i.putExtras(arguments);
		startActivity(i);
	}
}
